// 品牌控制器类，处理品牌相关的HTTP请求
package com.xjie.mall.goods.controller;

// 导入通用响应结果类
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xjie.mall.common.Result;
// 导入品牌实体类
import com.xjie.mall.goods.model.Brand;
// 导入品牌服务接口
import com.xjie.mall.goods.service.BrandService;
// 导入Spring框架的自动装配注解
import org.springframework.beans.factory.annotation.Autowired;
// 导入Spring Web MVC的RestController注解
import org.springframework.web.bind.annotation.*;

import java.util.List;

// 标记该类为RESTful风格的控制器，处理HTTP请求并直接返回数据
@RestController
// 设置该控制器的统一请求路径前缀为"/brand"
@RequestMapping("/brand")
public class BrandController {

    // 自动装配品牌服务实现类，用于调用业务逻辑方法
    @Autowired
    private BrandService brandService;

    /**
     * 添加品牌信息
     * @param brand 品牌对象，通过请求体传入
     * @return 操作结果响应对象
     */
    // 映射POST请求到"/addBrand"路径，用于添加品牌
    @PostMapping("/addBrand")
    // 通过@RequestBody注解将请求体中的JSON数据绑定到Brand对象
    public Result addBrand(@RequestBody Brand brand)
    {
        // 调用品牌服务的save方法保存品牌信息
        this.brandService.save(brand);
        // 返回操作成功的响应结果
        return Result.success();
    }

    /**
     * 根据ID获取品牌信息
     * @param id 品牌ID，通过路径变量传入
     * @return 包含品牌信息的操作结果响应对象
     */
    // 映射GET请求到"/getBrandById/{id}"路径，用于根据ID查询品牌
    @GetMapping("/getBrandById/{id}")
    // 通过@PathVariable注解将URL中的{id}绑定到方法参数id
    public Result getBrandById(@PathVariable String id)
    {
        // 调用品牌服务的getById方法根据ID查询品牌信息
        Brand brand = this.brandService.getById(id);
        // 将查询到的品牌信息封装到响应结果中并返回
        return Result.success(brand);
    }

    /**
     * 更新品牌信息
     * @param brand 品牌对象，包含更新后的信息，通过请求体传入
     * @return 操作结果响应对象
     */
    // 映射POST请求到"/updateBrand"路径，用于更新品牌信息
    @PostMapping("/updateBrand")
    // 通过@RequestBody注解将请求体中的JSON数据绑定到Brand对象
    public Result updateBrand(@RequestBody Brand brand)
    {
        // 调用品牌服务的updateById方法根据ID更新品牌信息
        this.brandService.updateById(brand);
        // 返回操作成功的响应结果
        return Result.success();
    }

    /**
     * 根据ID删除品牌信息
     * @param id 品牌ID，通过路径变量传入
     * @return 操作结果响应对象
     */
    // 映射DELETE请求到"/deleteBrand/{id}"路径，用于根据ID删除品牌
    @DeleteMapping("/deleteBrand/{id}")
    // 通过@PathVariable注解将URL中的{id}绑定到方法参数id
    public Result deleteBrand(@PathVariable String id)
    {
        // 调用品牌服务的removeById方法根据ID删除品牌信息
        this.brandService.removeById(id);
        // 返回操作成功的响应结果
        return Result.success();
    }

    /**
     * 条件查询
     *
     */
    @PostMapping(value = "/list")
    public Result<List<Brand>> list(@RequestBody(required = false) Brand brand)
    {
        //查询
        List<Brand> brands = brandService.queryList(brand);
        return Result.success(brands);
    }

    /**
     * 条件分页查询
     * @param currentPage
     * @param size
     * @param brand
     * @return
     */
    @GetMapping(value = "/queryPageList/{page}/{size}")
    public Result<Page<Brand>> queryPageList(
        @PathVariable(value = "page") Long currentPage,
        @PathVariable(value = "size") Long size,
        @RequestBody(required = false) Brand brand
    )
    {
        //分页查询
        Page<Brand> brandPage = brandService.queryPageList(currentPage,size,brand);
        return Result.success(brandPage);
    }


    /**
     * 根据分类id查询品牌
     * @param id
     * @return
     */
    @GetMapping("/category/{id}")
    public Result<List<Brand>> categoryBrands(@PathVariable Integer id)
    {
        List<Brand> brands = brandService.queryBrandIds(id);
        return Result.success(brands);
    }
}